/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.colegiatura.beans;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;
import org.apache.myfaces.custom.fileupload.UploadedFile;
import org.cip.esymons.colegiatura.bc.ArchivoPreinscripcionDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoEspecialidadDelegate;
import org.cip.esymons.colegiatura.bc.ColegiadoImagenDelegate;
import org.cip.esymons.colegiatura.bc.DireccionDelegate;
import org.cip.esymons.colegiatura.bc.PreInscripcionDelegate;
import org.cip.esymons.colegiatura.bc.TelefonoDelegate;
import org.cip.esymons.colegiatura.be.ArchivoPreinscripcion;
import org.cip.esymons.colegiatura.be.ColegiadoImagen;
import org.cip.esymons.colegiatura.be.Preinscripcion;
import org.cip.esymons.general.be.ColegiadoEspecialidad;
import org.cip.esymons.general.be.DireccionPersona;
import org.cip.esymons.general.be.TelefonoSolicitante;
import org.cip.esymons.general.util.ControladorAbstracto;

/**
 *
 * @author WILLIAM GASTAÑUEDI CABALLERO
 */
public class ArchivoPreinscripcionController {

//DECLARACION DE CLASES.

    private ArchivoPreinscripcionDelegate delegado;
    private PreInscripcionDelegate delegadoPreInscripcion;
    private ColegiadoEspecialidadDelegate delegadoEspCapitulo;
    private DireccionDelegate delegadoDireccion;
    private TelefonoDelegate delegadoTelefono;
    private ColegiadoImagenDelegate delegadoColImagen;

    private ArchivoPreinscripcion archivoPre;
    private ColegiadoEspecialidad colEsp;
    private DireccionPersona direccionPreinscritos,direccionEmp;
    private TelefonoSolicitante telefono,celular,telefonoEmp;
    private ColegiadoImagen colImagen;
    List<Preinscripcion> listaPreinscritoFechaConDireccion;
    List<Preinscripcion> listaPreIncritos;
    List<ArchivoPreinscripcion> listaArchivoPorFechas;
    List<ColegiadoImagen> listaColImagen;

    private Date fecha1,fecha2;
    private String sexo;
    private String fechaNac;
    private String estadoCivil;
    private String especialidad;
    private String universidad;
    private String fechaEgreso;
    private String fechaTitulo;
    private String fechaResolRec;
    private String fechaRevalida;
    private String fechaResolANR;
    private String telefonoFijo;
    private String movil;
    private String Cantidad;

    private UploadedFile upFile;
    boolean rendSuccess = false;
    boolean rendFailure = false;
    private String rutaFile;
    private String fileName;
    private String archivo;
    private String rutaZip;
    private String tipoArchivo;

//CONSTRUCTOR DE CLASES.
   public ArchivoPreinscripcionController() {

        delegado =  new ArchivoPreinscripcionDelegate();
        delegadoPreInscripcion = new PreInscripcionDelegate();
        delegadoEspCapitulo = new ColegiadoEspecialidadDelegate();
        delegadoDireccion = new DireccionDelegate();
        delegadoTelefono = new TelefonoDelegate();
        delegadoColImagen = new ColegiadoImagenDelegate();

        colImagen = new ColegiadoImagen();
        archivoPre = new ArchivoPreinscripcion();
        colEsp = new ColegiadoEspecialidad();
        direccionPreinscritos = new DireccionPersona();
        direccionEmp = new DireccionPersona();
        telefono = new TelefonoSolicitante();
        celular = new TelefonoSolicitante();
        telefonoEmp = new TelefonoSolicitante();
        listaPreinscritoFechaConDireccion = new ArrayList<Preinscripcion>();
        listaPreIncritos = new ArrayList<Preinscripcion>();
        listaArchivoPorFechas = new ArrayList<ArchivoPreinscripcion>();
        listaColImagen = new ArrayList<ColegiadoImagen>();

//        rutaFile = "c:\\reportes\\"; //RUTA WINDOWS
        rutaFile = "/modulos/colegiatura/archivos/CSV/"; // RUTA LINUX
//        rutaZip = "c:\\reportes\\"; //RUTA WINDOWS
        rutaZip = "/modulos/colegiatura/archivos/ZIP/"; // RUTA LINUX

    }
//GETTER AND SETTER.
    public String getCantidad() {
        return Cantidad;
    }

    public void setCantidad(String Cantidad) {
        this.Cantidad = Cantidad;
    }

    public String getTipoArchivo() {
        return tipoArchivo;
    }

    public void setTipoArchivo(String tipoArchivo) {
        this.tipoArchivo = tipoArchivo;
    }

    public String getRutaZip() {
        return rutaZip;
    }

    public void setRutaZip(String rutaZip) {
        this.rutaZip = rutaZip;
    }

    public ColegiadoImagen getColImagen() {
        return colImagen;
    }

    public void setColImagen(ColegiadoImagen colImagen) {
        this.colImagen = colImagen;
    }

    public ColegiadoImagenDelegate getDelegadoColImagen() {
        return delegadoColImagen;
    }

    public void setDelegadoColImagen(ColegiadoImagenDelegate delegadoColImagen) {
        this.delegadoColImagen = delegadoColImagen;
    }

    public Date getFecha1() {
        return fecha1;
    }

    public void setFecha1(Date fecha1) {
        this.fecha1 = fecha1;
    }

    public Date getFecha2() {
        return fecha2;
    }

    public void setFecha2(Date fecha2) {
        this.fecha2 = fecha2;
    }

    public List<ArchivoPreinscripcion> getListaArchivoPorFechas() {
        return listaArchivoPorFechas;
    }

    public void setListaArchivoPorFechas(List<ArchivoPreinscripcion> listaArchivoPorFechas) {
        this.listaArchivoPorFechas = listaArchivoPorFechas;
    }

    public TelefonoSolicitante getCelular() {
        return celular;
    }

    public void setCelular(TelefonoSolicitante celular) {
        this.celular = celular;
    }

    public DireccionDelegate getDelegadoDireccion() {
        return delegadoDireccion;
    }

    public void setDelegadoDireccion(DireccionDelegate delegadoDireccion) {
        this.delegadoDireccion = delegadoDireccion;
    }

    public TelefonoDelegate getDelegadoTelefono() {
        return delegadoTelefono;
    }

    public void setDelegadoTelefono(TelefonoDelegate delegadoTelefono) {
        this.delegadoTelefono = delegadoTelefono;
    }

    public DireccionPersona getDireccionEmp() {
        return direccionEmp;
    }

    public void setDireccionEmp(DireccionPersona direccionEmp) {
        this.direccionEmp = direccionEmp;
    }

    public DireccionPersona getDireccionPreinscritos() {
        return direccionPreinscritos;
    }

    public void setDireccionPreinscritos(DireccionPersona direccionPreinscritos) {
        this.direccionPreinscritos = direccionPreinscritos;
    }

    public List<Preinscripcion> getListaPreIncritos() {
        return listaPreIncritos;
    }

    public void setListaPreIncritos(List<Preinscripcion> listaPreIncritos) {
        this.listaPreIncritos = listaPreIncritos;
    }

    public TelefonoSolicitante getTelefono() {
        return telefono;
    }

    public void setTelefono(TelefonoSolicitante telefono) {
        this.telefono = telefono;
    }

    public TelefonoSolicitante getTelefonoEmp() {
        return telefonoEmp;
    }

    public void setTelefonoEmp(TelefonoSolicitante telefonoEmp) {
        this.telefonoEmp = telefonoEmp;
    }

    public String getArchivo() {
        return archivo;
    }

    public void setArchivo(String archivo) {
        this.archivo = archivo;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getRutaFile() {
        return rutaFile;
    }

    public void setRutaFile(String rutaFile) {
        this.rutaFile = rutaFile;
    }

    public boolean isRendFailure() {
        return rendFailure;
    }

    public void setRendFailure(boolean rendFailure) {
        this.rendFailure = rendFailure;
    }

    public boolean isRendSuccess() {
        return rendSuccess;
    }

    public void setRendSuccess(boolean rendSuccess) {
        this.rendSuccess = rendSuccess;
    }

    public UploadedFile getUpFile() {
        return upFile;
    }

    public void setUpFile(UploadedFile upFile) {
        this.upFile = upFile;
    }

    public String getEspecialidad() {
        return especialidad;
    }

    public void setEspecialidad(String especialidad) {
        this.especialidad = especialidad;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getFechaEgreso() {
        return fechaEgreso;
    }

    public void setFechaEgreso(String fechaEgreso) {
        this.fechaEgreso = fechaEgreso;
    }

    public String getFechaNac() {
        return fechaNac;
    }

    public void setFechaNac(String fechaNac) {
        this.fechaNac = fechaNac;
    }

    public String getFechaResolANR() {
        return fechaResolANR;
    }

    public void setFechaResolANR(String fechaResolANR) {
        this.fechaResolANR = fechaResolANR;
    }

    public String getFechaResolRec() {
        return fechaResolRec;
    }

    public void setFechaResolRec(String fechaResolRec) {
        this.fechaResolRec = fechaResolRec;
    }

    public String getFechaRevalida() {
        return fechaRevalida;
    }

    public void setFechaRevalida(String fechaRevalida) {
        this.fechaRevalida = fechaRevalida;
    }

    public String getFechaTitulo() {
        return fechaTitulo;
    }

    public void setFechaTitulo(String fechaTitulo) {
        this.fechaTitulo = fechaTitulo;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getUniversidad() {
        return universidad;
    }

    public void setUniversidad(String universidad) {
        this.universidad = universidad;
    }

    public String getMovil() {
        return movil;
    }

    public void setMovil(String movil) {
        this.movil = movil;
    }

    public String getTelefonoFijo() {
        return telefonoFijo;
    }

    public void setTelefonoFijo(String telefonoFijo) {
        this.telefonoFijo = telefonoFijo;
    }
  
    public ColegiadoEspecialidad getColEsp() {
        return colEsp;
    }

    public void setColEsp(ColegiadoEspecialidad colEsp) {
        this.colEsp = colEsp;
    }

    public ColegiadoEspecialidadDelegate getDelegadoEspCapitulo() {
        return delegadoEspCapitulo;
    }

    public void setDelegadoEspCapitulo(ColegiadoEspecialidadDelegate delegadoEspCapitulo) {
        this.delegadoEspCapitulo = delegadoEspCapitulo;
    }

    public List<Preinscripcion> getListaPreinscritoFechaConDireccion() {
        return listaPreinscritoFechaConDireccion;
    }

    public void setListaPreinscritoFechaConDireccion(List<Preinscripcion> listaPreinscritoFechaConDireccion) {
        this.listaPreinscritoFechaConDireccion = listaPreinscritoFechaConDireccion;
    }

    public PreInscripcionDelegate getDelegadoPreInscripcion() {
        return delegadoPreInscripcion;
    }

    public void setDelegadoPreInscripcion(PreInscripcionDelegate delegadoPreInscripcion) {
        this.delegadoPreInscripcion = delegadoPreInscripcion;
    }

    public ArchivoPreinscripcion getArchivoPre() {
        return archivoPre;
    }

    public void setArchivoPre(ArchivoPreinscripcion archivoPre) {
        this.archivoPre = archivoPre;
    }

    public ArchivoPreinscripcionDelegate getDelegado() {
        return delegado;
    }

    public void setDelegado(ArchivoPreinscripcionDelegate delegado) {
        this.delegado = delegado;
    }

//LISTA TODOS LOS ARCHIVOS .CSV GENERADOS.
    public List<ArchivoPreinscripcion> getListaArchivos(){

        return delegado.findAll();
    }
//LISTA LOS ARCHIVOS .CSV GENERADOS POR FECHAS.
    public List<ArchivoPreinscripcion> listaPorFechas(){

        listaArchivoPorFechas = null;
        listaArchivoPorFechas = delegado.listaPorFechas(fecha1, fecha2);
        Cantidad = "En lista "+listaArchivoPorFechas.size()+" archivos.";
        return listaArchivoPorFechas;
    }

    public String generarReporte(){

        return "reporte";
    }
    
    public String nuevoCSV(){

        return "nuevoCSV";
    }

    public String nuevoZIP(){

        return "nuevoZip";
    }

    public String retornar(){

        inicializa();
        return "listar";
    }

    public String regresar(){

        inicializa();
        return "regresa";
    }

    public String cancelar(){

        inicializa();
        return "salir";
    }

//LISTA DE PREINSCRITOS POR FECHAS ORDENADOS POR APELLIDO PATERNO
    public List<Preinscripcion> listaPreInscritosXFechaOrdenApellidos(){

        reportesController rp = (reportesController) ControladorAbstracto.getBean("reportesController");
        listaPreIncritos = new ArrayList<Preinscripcion>();
        return listaPreIncritos = delegadoPreInscripcion.listaPorFechasOrdenApellidos(rp.getFechaIni(),rp.getFechaFin());
    }

//  METODO PARA LA CREACION DE UN ARCHIVO CSV QUE CONTENDRA LA INFORMACION
//  DE LOS PREINSCRITOS Y SERA DESCARGADO DESDE UN ACCESO POR WEB POR LOS
//  ENCARGADOS DEL AREA DE SISTEMAS DEL CONSEJO NACIONAL.
    public String crearCSV(){

        String fechaActual;
        try
            {
            listaPreInscritosXFechaOrdenApellidos();
            
            HttpServletResponse response = ControladorAbstracto.getResponse();
            PrintWriter out = response.getWriter();
            
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
            fechaActual = sdf.format(new Date());
            fileName = null;
            fileName = "PreInscipcion-"+fechaActual+".csv";
            archivo = null;
            archivo = rutaFile + fileName;
            FileWriter fw = new FileWriter(archivo);

                //CABECERA DEL ARCHIVO
                //DATOS PERSONALES
                fw.append("Nombres"); fw.append(',');
                fw.append("Apellido Paterno"); fw.append(',');
                fw.append("Apellido Materno"); fw.append(',');
                fw.append("Sexo"); fw.append(',');
                fw.append("Fecha Nacimiento"); fw.append(',');
                fw.append("Estado Civil"); fw.append(',');
                fw.append("Nacionalidad"); fw.append(',');
                fw.append("D.N.I."); fw.append(',');
                fw.append("R.U.C."); fw.append(',');
                fw.append("Carnet Ext."); fw.append(',');
                fw.append("EMail personal 1"); fw.append(',');
                fw.append("EMail personal 2"); fw.append(',');
                fw.append("Página Web"); fw.append(',');
                 //DATOS RESIDENCIALES
                fw.append("Departamento"); fw.append(',');
                fw.append("Provincia"); fw.append(',');
                fw.append("Distrito"); fw.append(',');
                fw.append("Dirección"); fw.append(',');
                fw.append("Teléfono"); fw.append(',');
                fw.append("Celular"); fw.append(',');
                //DATOS LABORALES
                fw.append("Empresa"); fw.append(',');
                fw.append("Dirección"); fw.append(',');
                fw.append("Departamento"); fw.append(',');
                fw.append("Provincia"); fw.append(',');
                fw.append("Distrito"); fw.append(',');
                fw.append("Teléfono"); fw.append(',');
                fw.append("EMail Laboral"); fw.append(',');
                //DATOS FORMACION PROFESIONAL
                fw.append("Universidad"); fw.append(',');
                fw.append("Otra Universidad"); fw.append(',');
                fw.append("Especialidad"); fw.append(',');
                fw.append("Otra Especialidad"); fw.append(',');
                fw.append("Fecha de Egreso"); fw.append(',');
                fw.append("Fecha Obt. Título"); fw.append(',');
                fw.append("Nº Resol. rectoral"); fw.append(',');
                fw.append("Folio Resol. rectoral"); fw.append(',');
                fw.append("Hoja Resol. rectoral"); fw.append(',');
                fw.append("Fecha Resol. rectoral"); fw.append(',');
                fw.append("Institución Revalidación"); fw.append(',');
                fw.append("Nº Revalidación"); fw.append(',');
                fw.append("Fecha Revalidación"); fw.append(',');
                fw.append("Nº Resol. A.N.R."); fw.append(',');
                fw.append("Fecha Resol. A.N.R."); fw.append(',');
                fw.append("Estado del trámite"); fw.append(',');
                fw.append("Sede"); fw.append(',');
                fw.append('\n');
                        //listaPreinscritoFechaConDireccion
            for(Preinscripcion pre: listaPreIncritos){

                //DATOS PERSONALES
                fw.append(pre.getPerCodigo().getPerNombres()); fw.append(',');
                fw.append(pre.getPerCodigo().getPerapellidoPaterno()); fw.append(',');
                fw.append(pre.getPerCodigo().getPerapellidoMaterno()); fw.append(',');

                if(pre.getPerCodigo().getPerSexo()==true){
                    sexo = "M";
                }else{
                    sexo = "F";
                }
                fw.append(sexo); fw.append(',');

                SimpleDateFormat fn = new SimpleDateFormat("yyyy-MM-dd");
                fechaNac = fn.format(pre.getPerCodigo().getPerfechaNacimiento());
                fw.append(fechaNac); fw.append(',');

                estadoCivil = "";
                if(pre.getPerCodigo().getPerestadoCivil()!=null){
                    switch(pre.getPerCodigo().getPerestadoCivil()){

                        case 1 : estadoCivil = "1"; break;
                        case 2 : estadoCivil = "2"; break;
                        case 3 : estadoCivil = "3"; break;
                        case 4 : estadoCivil = "4"; break;

                    }
                }else{
                    estadoCivil = "0";
                }
                fw.append(estadoCivil); fw.append(',');
                fw.append(pre.getPerCodigo().getNacionalidad().getNacNombre()); fw.append(',');

                if(pre.getPerCodigo().getPerNroDNI() != null && !pre.getPerCodigo().getPerNroDNI().isEmpty()){
                    fw.append(pre.getPerCodigo().getPerNroDNI()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getPerCodigo().getSolRUC() != null && !pre.getPerCodigo().getSolRUC().isEmpty()){
                    fw.append(pre.getPerCodigo().getSolRUC()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getPerCodigo().getPerNroPasaporte()!= null && !pre.getPerCodigo().getPerNroPasaporte().isEmpty()){
                    fw.append(pre.getPerCodigo().getPerNroPasaporte()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getPerCodigo().getSolcorreopersonal1() != null && !pre.getPerCodigo().getSolcorreopersonal1().isEmpty()) {
                    fw.append(pre.getPerCodigo().getSolcorreopersonal1()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getPerCodigo().getSolcorreopersonal2() != null && !pre.getPerCodigo().getSolcorreopersonal2().isEmpty()){
                    fw.append(pre.getPerCodigo().getSolcorreopersonal2()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getPerCodigo().getSolPagweb() != null && !pre.getPerCodigo().getSolPagweb().isEmpty()){
                    fw.append(pre.getPerCodigo().getSolPagweb()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                
                
                //DATOS RESIDENCIALES
                direccionPreinscritos = new DireccionPersona();
                direccionPreinscritos = delegadoDireccion.buscaDireccionColegiado(pre.getPerCodigo().getSolCodigo());

                if(direccionPreinscritos.getDisCodigo().getProCodigo().getDepCodigo().getDepNombre()!=null && !direccionPreinscritos.getDisCodigo().getProCodigo().getDepCodigo().getDepNombre().isEmpty()){
                    fw.append(direccionPreinscritos.getDisCodigo().getProCodigo().getDepCodigo().getDepNombre()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(direccionPreinscritos.getDisCodigo().getProCodigo().getProNombre()!=null && !direccionPreinscritos.getDisCodigo().getProCodigo().getProNombre().isEmpty()){
                    fw.append(direccionPreinscritos.getDisCodigo().getProCodigo().getProNombre()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(direccionPreinscritos.getDisCodigo().getDisNombre()!=null && !direccionPreinscritos.getDisCodigo().getDisNombre().isEmpty()){
                    fw.append(direccionPreinscritos.getDisCodigo().getDisNombre()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(direccionPreinscritos.getDpeDireccion()!=null && !direccionPreinscritos.getDpeDireccion().isEmpty()){
                    fw.append(direccionPreinscritos.getDpeDireccion()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }

                telefono = new TelefonoSolicitante();
                telefono = delegadoTelefono.buscaTelefonoFijo(pre.getPerCodigo().getSolCodigo());
                if(telefono != null){
                    telefonoFijo = telefono.getTsoCodciudad()+" - "+telefono.getTsoNumero();
                    fw.append(telefonoFijo); fw.append(',');
                }else{
                    telefonoFijo = "";
                    fw.append(telefonoFijo); fw.append(',');
                }
                celular = new TelefonoSolicitante();
                celular = delegadoTelefono.buscaCelular(pre.getPerCodigo().getSolCodigo());
                if(celular != null){
                    movil = celular.getTsoCodciudad()+" - "+celular.getTsoNumero();
                    fw.append(movil); fw.append(',');
                }else{
                    movil = "";
                    fw.append(movil); fw.append(',');
                }

                //DATOS LABORALES
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(""); fw.append(',');

                //DATOS FORMACION PROFESIONAL
                if(pre.getFopCodigo().getUniCodigo().getUniNombre() != null && !pre.getFopCodigo().getUniCodigo().getUniNombre().isEmpty()){
                    universidad = pre.getFopCodigo().getUniCodigo().getUniNombre();
                }else{
                    universidad = pre.getFopCodigo().getFopinstAcademica();
                }
                if(pre.getFopCodigo().getEspCodigo().getEspDescripcion() != null && !pre.getFopCodigo().getEspCodigo().getEspDescripcion().isEmpty()){
                    especialidad = pre.getFopCodigo().getEspCodigo().getEspDescripcion();
                }else{
                    switch(pre.getPerCodigo().getColegiado().getTipoColegiado().getTcoCodigo()){
                        case 1 : especialidad = pre.getFopCodigo().getFopnuevoTitulo();break;
                        case 3 : especialidad = pre.getFopCodigo().getFoptituloExtranjero();break;
                    }
                }
                fw.append(universidad); fw.append(',');
                fw.append(""); fw.append(',');
                fw.append(especialidad); fw.append(',');
                fw.append(""); fw.append(',');

                if(pre.getFopCodigo().getFopFechaprom()!=null){
                    SimpleDateFormat fe = new SimpleDateFormat("yyyy-MM-dd");
                    fechaEgreso = fe.format(pre.getFopCodigo().getFopFechaprom());
                    fw.append(fechaEgreso); fw.append(',');
                }else{
                   fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFopfechaResGrado() != null){
                    SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
                    fechaTitulo = ft.format(pre.getFopCodigo().getFopfechaResGrado());
                    fw.append(fechaTitulo); fw.append(',');
                }else{
                   fw.append(""); fw.append(',');
                }

                if(pre.getFopCodigo().getFopresRecNum() != null && !pre.getFopCodigo().getFopresRecNum().isEmpty()) {
                    fw.append(pre.getFopCodigo().getFopresRecNum()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFopresRecFolio() != null && !pre.getFopCodigo().getFopresRecFolio().isEmpty()){
                    fw.append(pre.getFopCodigo().getFopresRecFolio()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFopresRecHoja() != null && !pre.getFopCodigo().getFopresRecHoja().isEmpty()){
                    fw.append(pre.getFopCodigo().getFopresRecHoja()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }

                if(pre.getFopCodigo().getFopresRecFecha() != null){
                    SimpleDateFormat fr = new SimpleDateFormat("yyyy-MM-dd");
                    fechaResolRec = fr.format(pre.getFopCodigo().getFopresRecFecha());
                    fw.append(fechaResolRec); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFoprevInstitucion() != null && !pre.getFopCodigo().getFoprevInstitucion().isEmpty()){
                    fw.append(pre.getFopCodigo().getFoprevInstitucion()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFoprevNumero() != null && !pre.getFopCodigo().getFoprevNumero().isEmpty()){
                    fw.append(pre.getFopCodigo().getFoprevNumero()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }      
                if(pre.getFopCodigo().getFoprevFecha() != null){
                    SimpleDateFormat frv = new SimpleDateFormat("yyyy-MM-dd");
                    fechaRevalida = frv.format(pre.getFopCodigo().getFoprevFecha());
                    fw.append(fechaRevalida); fw.append(',');                   
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFopresolANRnum() != null && !pre.getFopCodigo().getFopresolANRnum().isEmpty()){
                     fw.append(pre.getFopCodigo().getFopresolANRnum()); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                if(pre.getFopCodigo().getFopresolANRfecha() != null){
                    SimpleDateFormat frANR = new SimpleDateFormat("yyyy-MM-dd");
                    fechaResolANR = frANR.format(pre.getFopCodigo().getFopresolANRfecha());
                    fw.append(fechaResolANR); fw.append(',');
                }else{
                    fw.append(""); fw.append(',');
                }
                //DATOS DEL TRAMITE
                fw.append("0"); fw.append(',');
                fw.append("15"); fw.append(',');
                fw.append('\n');
            }

            fw.flush();
            fw.close();
            System.out.println("Csv file Successfully created.");

            //CARGAMOS EL ARCHIVO
            System.out.println("archivo:"+archivo);
            tipoArchivo = null;
            tipoArchivo = "CSV";
            guardaArchivo();
            mostrarMensaje("INFO: ", "Archivo CSV creado satisfactoriamente...", FacesMessage.SEVERITY_INFO);
            }catch (Exception ex) {
                System.out.println("error....");
                ex.printStackTrace ();
                mostrarMensaje("ADVERTENCIA: ", "Se genero un error al crear el Archivos CSV", FacesMessage.SEVERITY_WARN);
            }
         return null;

    }

// METODO QUE ALMACENARA TODOS LOS ARCHIVOS CSV QUE SEAN GENERADOS Y TENDRAN
// COMO NOMBRE PREINSCRIPCION SEGUIDO DE LA FECHA DE CREACION.
    public String guardaArchivo(){

        try{
            System.out.println("ruta: "+ archivo);
           //GUARDAMOS EN LA BASE DE DATOS
            archivoPre = new ArchivoPreinscripcion();
            archivoPre.setAprRuta(archivo);
            archivoPre.setAprnombreArchivo(fileName);
            archivoPre.setAprfechaCreacion(new Date());
            archivoPre.setAprTipoArchivo(tipoArchivo);
            delegado.create(archivoPre);
            return null;
        }catch(Exception ex){
            return null;
        }
    }

    //METODO QUE PERMITE ELIMINAR UN ARCHIVO DE PREINSCRIPCION CREADO
    public String removerArchivo(){

        try{
            File fichero = new File(archivoPre.getAprRuta());

                if(fichero.delete()){
                    mostrarMensaje("Exito: ", "Se elimino el archivo Correctamnete.", FacesMessage.SEVERITY_INFO);
                }else{
                    mostrarMensaje("ERROR:_", "No se pudo eliminar el archivo", FacesMessage.SEVERITY_ERROR);
                }

            delegado.remove(archivoPre);
            archivoPre = new ArchivoPreinscripcion();
            getListaArchivos();
            return null;
        }catch(Exception ex){
            System.out.println("error: "+ex.getMessage());
            return null;
        }
    }    
//METODO QUE PERMITE SUBIR EL ARCHIVO CSV CREADO AL SERVIDOR Y ALMACENARLO
//EN UNA CARPETA ASIGNADA.
    public String upload() throws IOException {

        try {
            InputStream stream = upFile.getInputStream();
            OutputStream out=new FileOutputStream(archivo);
            System.out.println("ruta: "+archivo);
            long size = upFile.getSize();
            byte[] buffer = new byte[(int) size];
            stream.read(buffer, 0, (int) size);
            out.write(buffer, 0, (int) size);
            stream.close();
            
            out.close();
            rendSuccess = true;
            rendFailure = false;
            System.out.println("File Upload Successful.");
            return "ok";

        } catch (Exception ioe) {
            System.out.println("File Upload Unsuccessful.");
            System.out.println("errorrrr" + ioe.toString());
            rendSuccess = false;
            rendFailure = true;
            return "no";
        }
    }

//METODO QUE PERMITE DESCARGAR Y VISUALIZAR UN ARCHIVO CSV, QUE SE ENCUENTRA
//ALOJADO EN EL SERVIDOR.
    public String mostrarArchivoCSV() {

        try {
            File file = new File(archivoPre.getAprRuta());
            FacesContext fcontext = FacesContext.getCurrentInstance();
            ExternalContext eContext = fcontext.getExternalContext();
            HttpServletResponse response = (HttpServletResponse) eContext.getResponse();
            response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
            response.setHeader("Cache-Control", "public");
            response.setContentType("application/" + archivoPre.getAplication());
            OutputStream os = response.getOutputStream();
            FileInputStream inputStream = new FileInputStream(file);
            int tamanoInput = inputStream.available();
            byte[] datosPDF = new byte[tamanoInput];
            inputStream.read(datosPDF, 0, tamanoInput);
            os.write(datosPDF, 0, tamanoInput);
            os.close();
            fcontext.responseComplete();
            mostrarMensaje("INFO: ", "Archivo descargado satisfactoriamente...", FacesMessage.SEVERITY_INFO);
        } catch (Exception e) {
            mostrarMensaje("ADVERTENCIA: ","Error al descargar archivo...", FacesMessage.SEVERITY_WARN);
            return "";
        }
        return "";
    }

//METODO Q1UE PERMITE INICIALIZAR LOS OBJETOS Y DELEGADOS, ASI COMO LAS VARAIBLES
// UTILIZADAS.
    public void inicializa(){

        delegado =  new ArchivoPreinscripcionDelegate();
        delegadoPreInscripcion = new PreInscripcionDelegate();
        delegadoEspCapitulo = new ColegiadoEspecialidadDelegate();
        delegadoDireccion = new DireccionDelegate();
        delegadoTelefono = new TelefonoDelegate();

        archivoPre = new ArchivoPreinscripcion();
        colEsp = new ColegiadoEspecialidad();
        direccionPreinscritos = new DireccionPersona();
        direccionEmp = new DireccionPersona();
        telefono = new TelefonoSolicitante();
        celular = new TelefonoSolicitante();
        telefonoEmp = new TelefonoSolicitante();
        listaPreinscritoFechaConDireccion = new ArrayList<Preinscripcion>();
        listaPreIncritos = new ArrayList<Preinscripcion>();
        listaArchivoPorFechas = new ArrayList<ArchivoPreinscripcion>();
        fecha1 = null;
        fecha2 = null;

    }

//METODO QUE INVOCA POR SEPARADO EL EMPAQUETADO DE LAS IMAGENES QUE SE LES
//SOLICITA A LOS INGENIEROS QUE SE ESTAN COLEGIANDO, Y QUE SE ENCUENTRAN
//ALMACENADOS EN EL SERVIDOR.
    public String crearArchivoZIP() throws IOException{

        try{
            crearZipFotos();
            crearZipDNIFrente();
            crearZipDNIEspalda();
            crearZipTituloFrente();
            crearZipTituloEspalda();
            crearZipResolucion();
            crearZipCarnetExt();
            crearZipFirma();
            mostrarMensaje("INFO: ", "Archivos ZIP creados satisfactoriamente...", FacesMessage.SEVERITY_INFO);
            return null;
        }catch(Exception ex){
            mostrarMensaje("ADVERTENCIA: ", "Se genero un error al crear los Archivos ZIP", FacesMessage.SEVERITY_WARN);
            return null;
        }
    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO FOTO, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipFotos() throws IOException
    {
        try {
            SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "fotos-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destFoto = new FileOutputStream(archivo);
        ZipOutputStream foto = new ZipOutputStream(new BufferedOutputStream(destFoto));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==1){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    foto.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        foto.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        foto.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errorr");
        }
    }
//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO DNI FRENTE, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipDNIFrente() throws IOException
    {
        try {
            SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "DNIFrente-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destDNIFrente = new FileOutputStream(archivo);
        ZipOutputStream dniFrente = new ZipOutputStream(new BufferedOutputStream(destDNIFrente));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==2){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    dniFrente.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        dniFrente.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        dniFrente.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errororor");
        }
    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO DNI ESPALDA, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipDNIEspalda() throws IOException
    {
        try {
        SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "DNIEspalda-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destDNIEspalda = new FileOutputStream(archivo);
        ZipOutputStream dniEspalda = new ZipOutputStream(new BufferedOutputStream(destDNIEspalda));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==3){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    dniEspalda.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        dniEspalda.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        dniEspalda.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errorrrr");
        }

    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO TITULO FRENTE, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipTituloFrente() throws IOException
    {
        try {
            SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "TituloFrente-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destTituloFrente = new FileOutputStream(archivo);
        ZipOutputStream tituloFrente = new ZipOutputStream(new BufferedOutputStream(destTituloFrente));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==4){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    tituloFrente.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        tituloFrente.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        tituloFrente.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errororr");
        }
    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO TITULO ESPALDA, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipTituloEspalda() throws IOException
    {
        try {
                    SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "TituloEspalda-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destTituloEspalda = new FileOutputStream(archivo);
        ZipOutputStream tituloEspalda = new ZipOutputStream(new BufferedOutputStream(destTituloEspalda));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==5){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    tituloEspalda.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        tituloEspalda.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        tituloEspalda.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errororr");
        }
    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO RESOLUCION, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipResolucion() throws IOException
    {
        try {
                    SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "Resolucion-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destResolucion = new FileOutputStream(archivo);
        ZipOutputStream resolucion = new ZipOutputStream(new BufferedOutputStream(destResolucion));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==6){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    resolucion.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        resolucion.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        resolucion.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("erroorrr");
        }
    }

//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO CARNET DE EXTRANJERIA,
//DE TODOS LOS INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS
//DEL CONSEJO NACIONAL.
    public void crearZipCarnetExt() throws IOException
    {
        try {
            SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "CarnetExt-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destCarnet = new FileOutputStream(archivo);
        ZipOutputStream carnetExt = new ZipOutputStream(new BufferedOutputStream(destCarnet));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

        colImagen = new ColegiadoImagen();
        if(pre.getPerCodigo().getColegiado().getTipoColegiado().getTcoCodigo() == 3){
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==8){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroPasaporte()+".jpg");
                    carnetExt.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        carnetExt.write(data, 0, count);
                    }
                    origin.close();

                }
            }
          }
        }
        carnetExt.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errorororor");
        }
    }
//METODO QUE EMPAQUETA LOS ARCHIVOS DE IMAGEN DEL TIPO FIRMA, DE TODOS LOS
//INGENIEROS PREINSCRITOS, PARA SER DESCARGADOS POR LOS ENCARGADOS DEL CONSEJO
//NACIONAL.
    public void crearZipFirma() throws IOException
    {
        try {
            SimpleDateFormat sdfn = new SimpleDateFormat("dd-MM-yyyy");
        String fechaDiaria = sdfn.format(new Date());
        fileName = null;
        fileName = "Firmas-"+fechaDiaria+".zip";
        archivo = null;
        archivo = rutaZip+fileName;

        FileOutputStream destFirma = new FileOutputStream(archivo);
        ZipOutputStream firma = new ZipOutputStream(new BufferedOutputStream(destFirma));

        listaPreInscritosXFechaOrdenApellidos();

        for(Preinscripcion pre : listaPreIncritos){

            colImagen = new ColegiadoImagen();
            listaColImagen = delegadoColImagen.listaPorColegiado(pre.getPerCodigo().getColegiado());

            for(ColegiadoImagen colImage : listaColImagen){

                if(colImage.getTimCodigo().getTimCodigo()==8){

                    FileInputStream im = new FileInputStream(colImage.getCimRuta());
                    ZipEntry ze = new ZipEntry(colImage.getColCodigo().getPersonaNatural().getPerNroDNI()+".jpg");
                    firma.putNextEntry(ze);

                    /*Lectura y escritura con un buffer del origen al archivo .zip*/
                    BufferedInputStream origin = new BufferedInputStream(im, 1024);
                    byte[] data = new byte[1024];
                    int count;
                    while( ( count = origin.read(data, 0, 1024) ) != -1 )
                    {
                        firma.write(data, 0, count);
                    }
                    origin.close();

                }
            }
        }
        firma.close();
        tipoArchivo = null;
        tipoArchivo = "ZIP";
        guardaArchivo();
        } catch (Exception e) {
            System.out.println("errororor");
        }
    }

// METODO QUE PERMITE MOSTRAR LOS EXITOS O ERRORES DE LOS PROCESOS QUE SE HAN EJECUTADO.
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }
}
